Cost-based Query Optimizer

Database Tutorials - অ্যাপাচি প্রেস্টো (Apache Presto) Presto Query Planning এবং Optimization |
196
196

Cost-based Query Optimizer (CBO) হল একটি গুরুত্বপূর্ণ উপাদান যা Presto এর কোয়েরি এক্সিকিউশনের পারফরম্যান্স উন্নত করে। এটি কোয়েরির জন্য বিভিন্ন এক্সিকিউশন প্ল্যান তৈরি করে এবং সর্বাধিক কার্যকরী (কম খরচে) একটিকে নির্বাচন করে। CBO ডেটাবেসে বিদ্যমান তথ্যের উপর ভিত্তি করে একটি কোয়েরি চালানোর জন্য সবথেকে কম খরচের উপায় খুঁজে বের করে, যেমন কম CPU ব্যবহার, কম মেমরি খরচ, কম ডিস্ক I/O ইত্যাদি।


Cost-based Query Optimization কীভাবে কাজ করে?

Presto-তে CBO মূলত কোয়েরির বিভিন্ন এক্সিকিউশন পরিকল্পনা (execution plans) তৈরি করে এবং সেই সব প্ল্যানের খরচের তুলনা করে সর্বোত্তম পরিকল্পনাটি নির্বাচন করে। প্রতিটি পরিকল্পনার জন্য খরচ নির্ধারণ করা হয়, এবং CBO সিস্টেমটি সেই খরচের ভিত্তিতে সর্বোচ্চ কার্যকারিতা অর্জন করতে পারে এমন পরিকল্পনাটি চয়ন করে।

  1. Query Parsing:
    প্রথমে, Presto কোয়েরি গ্রহণ করে এবং তা একটি লজিক্যাল কুয়েরি প্ল্যান এ রূপান্তরিত করে। এই প্ল্যানটি ডেটা এক্সেস করার জন্য যেসব স্টেপ বা অপারেশন দরকার তা নির্ধারণ করে।
  2. Candidate Execution Plans:
    কোয়েরি প্ল্যানের জন্য Presto একাধিক সম্ভাব্য এক্সিকিউশন প্ল্যান তৈরি করে। প্রতিটি প্ল্যানের মধ্যে বিভিন্ন ধরনের join পদ্ধতি, ডেটা অ্যাক্সেস পদ্ধতি (যেমন full scan, index scan), এবং অন্যান্য অপ্টিমাইজেশন স্টেপ (যেমন filtering, sorting) থাকতে পারে।
  3. Cost Estimation:
    প্রতিটি এক্সিকিউশন প্ল্যানের জন্য CBO খরচের অনুমান করে। এই খরচ সাধারণত নির্ধারিত হয়:

    • I/O অপারেশন (ডেটা পড়া, ডিস্ক অ্যাক্সেস)
    • CPU সাইকেল (কম্পিউটেশনাল কাজ)
    • মেমরি ব্যবহার (ইন্টারমিডিয়েট রেজাল্ট বা জয়েন প্রক্রিয়া)
    • নেটওয়ার্ক ওভারহেড (ডিস্ট্রিবিউটেড সিস্টেমে ডেটা স্থানান্তর)

    CBO ডেটার পরিসংখ্যান (যেমন টেবিল সাইজ, সারির সংখ্যা, ডেটার বিতরণ) ব্যবহার করে এই খরচের অনুমান তৈরি করে।

  4. Optimal Plan Selection:
    খরচের তুলনা করার পরে, CBO সবচেয়ে কম খরচের পরিকল্পনাটি নির্বাচন করে। অর্থাৎ, যেটি কম সম্পদ ব্যবহার করবে এবং দ্রুত শেষ হবে, সেটি নির্বাচন করা হয়।
  5. Query Execution:
    নির্বাচিত এক্সিকিউশন প্ল্যানটি পরে কার্যকর করা হয়, এবং Presto তার ডিস্ট্রিবিউটেড আর্কিটেকচার ব্যবহার করে কোয়েরি চালায়।

Presto CBO এর সুবিধা

  • কার্যকরী কোয়েরি এক্সিকিউশন:
    CBO কোয়েরি এক্সিকিউশনের সময় অপ্টিমাল (সর্বাধিক কার্যকরী) প্ল্যান নির্বাচন করে, যা কোয়েরি চালানোর সময় সিস্টেমের খরচ কমাতে সাহায্য করে।
  • সম্পদ সাশ্রয়:
    CBO মেমরি, CPU এবং I/O অপারেশনগুলো কমিয়ে আনে, যা সিস্টেমের সম্পদ সাশ্রয় করে এবং পারফরম্যান্স উন্নত করে।
  • অটোমেটিক অপ্টিমাইজেশন:
    CBO কোয়েরি অপ্টিমাইজ করার জন্য স্বয়ংক্রিয়ভাবে সেরা পরিকল্পনাটি নির্বাচন করে, ফলে ডেটা সায়েন্টিস্ট বা ডেভেলপারদের ম্যানুয়ালি অপ্টিমাইজেশন করতে হয় না।
  • স্কেলেবিলিটি এবং পারফরম্যান্স:
    CBO ডিস্ট্রিবিউটেড সিস্টেমে (যেমন Presto) কোয়েরি এক্সিকিউশনকে আরও স্কেলেবল এবং কার্যকরী করে তোলে।

Presto CBO এর অপ্টিমাইজেশন কৌশল

  1. Join Reordering:
    CBO কোয়েরির জয়েনের অর্ডার পরিবর্তন করতে পারে, যাতে মাঝখানের ডেটার সাইজ কমানো যায় এবং দ্রুত এক্সিকিউশন হয়।
  2. Join Algorithm Selection:
    CBO বিভিন্ন ধরনের join পদ্ধতি (যেমন hash join, nested loop join) ব্যবহার করতে পারে, ডেটার বিতরণ ও আকারের উপর নির্ভর করে সেরা পদ্ধতি নির্বাচন করে।
  3. Predicate Pushdown:
    CBO ফিল্টার (যেমন WHERE ক্লজ) ডেটা সোর্সের কাছে স্থানান্তর করে, যাতে ডেটা আরও দ্রুত ফিল্টার করা যায় এবং অপ্রয়োজনীয় ডেটা প্রক্রিয়া না হয়।
  4. Projection Pushdown:
    CBO সিলেক্ট অপারেশনটি (যেমন SELECT ক্লজ) ডেটা সোর্সে পুশ ডাউন করতে পারে, যাতে শুধুমাত্র প্রয়োজনীয় কলামগুলি নেওয়া হয় এবং অপ্রয়োজনীয় ডেটা এড়ানো হয়।
  5. Aggregation Optimization:
    CBO আগ্রিগেশন অপারেশনগুলি প্রক্রিয়া করার সময় তা আরো দ্রুত এবং সমান্তরালে করতে পারে, যাতে ডেটা শাফলিং কমানো যায়।
  6. Partition Pruning:
    CBO পার্টিশন করা টেবিলের ক্ষেত্রে শুধুমাত্র প্রয়োজনীয় পার্টিশনগুলি পড়ার জন্য পার্টিশন প্রুনিং করতে পারে, ফলে I/O অপারেশন কমানো যায়।

Presto CBO এর সীমাবদ্ধতা

  • ডেটা পরিসংখ্যানের উপর নির্ভরতা:
    CBO সঠিকভাবে কাজ করার জন্য ডেটার পরিসংখ্যানের উপর নির্ভর করে। যদি পরিসংখ্যান সঠিক না হয় বা আপডেট না করা হয়, তবে এটি সাব-অপ্টিমাল (কম কার্যকরী) প্ল্যান নির্বাচিত করতে পারে।
  • জটিলতা:
    কিছু জটিল কোয়েরি বা বিশেষ কিছু ক্ষেত্রে CBO পুরোপুরি নিখুঁত অপ্টিমাইজেশন করতে পারে না, কারণ এটি ডেটা পরিসংখ্যান এবং এক্সিকিউশন কৌশলের উপর ভিত্তি করে কাজ করে।
  • অপ্টিমাইজেশন প্রক্রিয়ার অতিরিক্ত খরচ:
    অপ্টিমাইজেশন প্রক্রিয়ার জন্য কিছু অতিরিক্ত খরচ হতে পারে, যা কখনো কখনো সহজ কোয়েরির জন্য পারফরম্যান্সে নেতিবাচক প্রভাব ফেলতে পারে।

উদাহরণ

ধরা যাক, একটি কোয়েরি:

SELECT a.name, b.salary
FROM employees a
JOIN salaries b ON a.id = b.employee_id
WHERE a.department = 'Engineering'

CBO ছাড়া:
প্রথমে সবগুলো employees এবং salaries টেবিলের রেকর্ড পড়ে, তারপর জয়েন করা হয় এবং পরিশেষে department = 'Engineering' ফিল্টার করা হয়। এটি সমস্ত রেকর্ড পড়ে ফিল্টার এবং জয়েন করার জন্য বেশি ডেটা পড়বে।

CBO এর মাধ্যমে:
CBO প্রথমে a.department = 'Engineering' ফিল্টারটি ডেটাবেস থেকে চালাবে, যাতে employees টেবিল থেকে শুধুমাত্র প্রয়োজনীয় রেকর্ডগুলো নেওয়া হয়। এরপর সবচেয়ে কার্যকরী জয়েন পদ্ধতি (যেমন hash join) ব্যবহার করে ফিল্টার করা ডেটার সাথে salaries টেবিলের ডেটা জয়েন করা হবে।


উপসংহার

Presto-তে Cost-based Query Optimizer (CBO) একটি শক্তিশালী টুল যা কোয়েরি এক্সিকিউশনের সময় খরচ কমানোর মাধ্যমে পারফরম্যান্স বৃদ্ধি করতে সাহায্য করে। এটি ডিস্ট্রিবিউটেড সিস্টেমে, বিশেষত বড় ডেটাসেটের উপর কোয়েরি চালানোর সময় অত্যন্ত কার্যকরী। CBO একটি অটোমেটিক অপ্টিমাইজেশন প্রক্রিয়া, যা ডেভেলপার বা ডেটা সায়েন্টিস্টদের ম্যানুয়ালি কোয়েরি অপ্টিমাইজ করতে হয় না।

Content added By
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion